package com.gsafety.libraryktx.expand

import com.gsafety.library.Utils.ByteBufferUtil
import java.nio.ByteBuffer

/**
 * 获取2个字节的short
 *
 * @param reverse 是否反转读取
 * @return 2个字节的short
 */
inline fun <reified T : ByteBuffer> T.getShort(reverse: Boolean = false) = ByteBufferUtil.getShort(this, reverse)

/**
 * 往缓冲区中写入一个short转换成的2个字节
 *
 * @param value   一个short
 * @param reverse 是否反转写入
 */
inline fun <reified T : ByteBuffer> T.putShort(value: Short, reverse: Boolean = false) = ByteBufferUtil.putShort(this, value, reverse)

/**
 * 获取4个字节的int
 *
 * @param reverse 是否反转读取
 * @return 4个字节的int
 */
inline fun <reified T : ByteBuffer> T.getInt(reverse: Boolean = false) = ByteBufferUtil.getInt(this, reverse)

/**
 * 往缓冲区中写入一个int转换成的4个字节
 *
 * @param value   一个int
 * @param reverse 是否反转写入
 */
inline fun <reified T : ByteBuffer> T.putInt(value: Int, reverse: Boolean = false) = ByteBufferUtil.putInt(this, value, reverse)

/**
 * 获取2个字节的char
 *
 * @param reverse 是否反转读取
 * @return 2个字节的char
 */
inline fun <reified T : ByteBuffer> T.getChar(reverse: Boolean = false) = ByteBufferUtil.getChar(this, reverse)

/**
 * 往缓冲区中写入一个char转换成的2个字节
 *
 * @param value   一个char
 * @param reverse 是否反转写入
 */
inline fun <reified T : ByteBuffer> T.putChar(value: Char, reverse: Boolean = false) = ByteBufferUtil.putChar(this, value, reverse)

/**
 * 获取4个字节的float
 *
 * @param reverse 是否反转读取
 * @return 4个字节的float
 */
inline fun <reified T : ByteBuffer> T.getFloat(reverse: Boolean = false) = ByteBufferUtil.getFloat(this, reverse)

/**
 * 往缓冲区中写入一个float转换成的4个字节
 *
 * @param value   一个float
 * @param reverse 是否反转写入
 */
inline fun <reified T : ByteBuffer> T.putFloat(value: Float, reverse: Boolean = false) = ByteBufferUtil.putFloat(this, value, reverse)

/**
 * 获取8个字节的float
 *
 * @param reverse 是否反转读取
 * @return 8个字节的double
 */
inline fun <reified T : ByteBuffer> T.getDouble(reverse: Boolean = false) = ByteBufferUtil.getDouble(this, reverse)

/**
 * 往缓冲区中写入一个double转换成的8个字节
 *
 * @param value   一个double
 * @param reverse 是否反转写入
 */
inline fun <reified T : ByteBuffer> T.putDouble(value: Double, reverse: Boolean = false) = ByteBufferUtil.putDouble(this, value, reverse)

